﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace GestorDeFlotasDesktop.AbmTarifa
{
    public partial class AbmTurno : Form
    {
        private int selected_elem = -1;
        public AbmTurno(Modelo.FormActions.Actions action, string id)
        {
            InitializeComponent();
            lbl_estado.Text = "ALTA";
            if (action == Modelo.FormActions.Actions.Modificacion || action == Modelo.FormActions.Actions.Baja)
            {
                selected_elem = Convert.ToInt32(id);
                lbl_estado.Text = "MODIFICACION";

                using (SqlConnection con = Modelo.Modelo.createConnection())
                {
                    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM NUNCA_TAXI.Turnos WHERE Id_Turno = " + id , con);

                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    tb_desc.Text = dt.Rows[0]["Tu_Descripcion"].ToString();
                    tb_ini.Text = dt.Rows[0]["Tu_Hora_Ini"].ToString();
                    tb_fin.Text = dt.Rows[0]["Tu_Hora_Fin"].ToString();
                    tb_ficha.Text = dt.Rows[0]["Tu_Valor_Ficha"].ToString();
                    tb_bandera.Text = dt.Rows[0]["Tu_Valor_Bandera"].ToString();
                    if (Convert.ToBoolean(dt.Rows[0]["Tu_Habilitado"].ToString()) == false)
                    {
                        cb_habilitado.Checked = false;
                    }
                    else
                    {
                        cb_habilitado.Checked = true;
                    }

                    tb_desc.Enabled = false;

                    if (action == Modelo.FormActions.Actions.Baja)
                    {
                        lbl_estado.Text = "BAJA";
                        gb_car.Enabled = false;
                    }

                    try
                    {
                        Modelo.Modelo.openConnection(con);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        Modelo.Modelo.closeConnection(con);
                    }
                }
            }
        }

        private void AbmTurno_Load(object sender, EventArgs e)
        {

        }

        private void aceptar_Click(object sender, EventArgs e)
        {
            if (tb_bandera.Text != "" && tb_desc.Text != "" && tb_ficha.Text != "" && tb_fin.Text != "" && tb_ini.Text != "" && Convert.ToInt32(tb_ini.Text) <= 24 && Convert.ToInt32(tb_ini.Text) >= 0 && Convert.ToInt32(tb_fin.Text) <= 24 && Convert.ToInt32(tb_fin.Text) >= 0)
            {
                if (!(Convert.ToInt32(tb_ini.Text) >= Convert.ToInt32(tb_fin.Text)))
                {
                    using (SqlConnection con = Modelo.Modelo.createConnection())
                    {
                        if (lbl_estado.Text == "ALTA")
                        {
                            using (SqlConnection con_un = Modelo.Modelo.createConnection())
                            {
                                try
                                {
                                    Modelo.Modelo.openConnection(con_un);
                                    SqlCommand comando_check_unique = new SqlCommand(Modelo.SqlQueries.getTurnoByFranja(tb_ini.Text, tb_fin.Text), con_un);
                                    SqlDataReader reader = comando_check_unique.ExecuteReader();
                                    if (reader.Read())
                                    {
                                        MessageBox.Show("Los turnos no pueden pisarse entre si. Franja horaria ocupada");
                                    }
                                    else
                                    {
                                        SqlCommand comando = new SqlCommand("INSERT INTO NUNCA_TAXI.Turnos(Tu_Hora_Ini,Tu_Hora_Fin,Tu_Descripcion,Tu_Valor_Ficha,Tu_Valor_Bandera,Tu_Habilitado) VALUES(@h_ini,@h_fin,@desc,@ficha,@bandera,@habi)", con);
                                        comando.Parameters.AddWithValue("h_ini", tb_ini.Text);
                                        comando.Parameters.AddWithValue("h_fin", tb_fin.Text);
                                        comando.Parameters.AddWithValue("desc", tb_desc.Text);
                                        comando.Parameters.AddWithValue("ficha", Convert.ToDecimal(tb_ficha.Text));
                                        comando.Parameters.AddWithValue("bandera", Convert.ToDecimal(tb_bandera.Text));
                                        if (cb_habilitado.Checked == true)
                                        {
                                            comando.Parameters.AddWithValue("habi", 1);
                                        }
                                        else if (cb_habilitado.Checked == false)
                                        {
                                            comando.Parameters.AddWithValue("habi", 0);
                                        }

                                        try
                                        {
                                            Modelo.Modelo.openConnection(con);
                                            comando.ExecuteNonQuery();
                                        }
                                        catch (Exception ex)
                                        {
                                            MessageBox.Show(ex.Message);
                                        }
                                        finally
                                        {
                                            tb_ini.Text = "";
                                            tb_fin.Text = "";
                                            tb_desc.Text = "";
                                            tb_ficha.Text = "";
                                            tb_bandera.Text = "";
                                            Modelo.Modelo.closeConnection(con);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message);
                                }
                            }
                        }
                        if (lbl_estado.Text == "MODIFICACION")
                        {
                            bool found = false;
                            using (SqlConnection con_un = Modelo.Modelo.createConnection())
                            {
                                try
                                {
                                    Modelo.Modelo.openConnection(con_un);
                                    SqlCommand comando_check_unique = new SqlCommand(Modelo.SqlQueries.getTurnoByFranja(tb_ini.Text, tb_fin.Text), con_un);
                                    SqlDataReader reader = comando_check_unique.ExecuteReader();
                                    while (reader.Read())
                                    {
                                        if (!reader[0].ToString().Equals(selected_elem.ToString()))
                                        {
                                            MessageBox.Show("Los turnos no pueden pisarse entre si. Franja horaria ocupada");
                                            found = true;
                                            break;
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message);
                                }
                            }
                            if (!found)
                            {
                                SqlCommand comando = new SqlCommand("UPDATE NUNCA_TAXI.Turnos SET Tu_Hora_Ini=@h_ini,Tu_Hora_Fin=@h_fin,Tu_Descripcion=@desc,Tu_Valor_Ficha=@ficha,Tu_Valor_Bandera=@bandera,Tu_Habilitado=@habi WHERE Tu_Descripcion = '" + tb_desc.Text + "'", con);
                                comando.Parameters.AddWithValue("h_ini", tb_ini.Text);
                                comando.Parameters.AddWithValue("h_fin", tb_fin.Text);
                                comando.Parameters.AddWithValue("desc", tb_desc.Text);
                                comando.Parameters.AddWithValue("ficha", Convert.ToDecimal(tb_ficha.Text));
                                comando.Parameters.AddWithValue("bandera", Convert.ToDecimal(tb_bandera.Text));
                                if (cb_habilitado.Checked == true)
                                {
                                    comando.Parameters.AddWithValue("habi", 1);
                                }
                                else if (cb_habilitado.Checked == false)
                                {
                                    comando.Parameters.AddWithValue("habi", 0);
                                }

                                try
                                {
                                    Modelo.Modelo.openConnection(con);
                                    comando.ExecuteNonQuery();
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message);
                                }
                                finally
                                {
                                    Modelo.Modelo.closeConnection(con);
                                }
                            }
                        }
                        if (lbl_estado.Text == "BAJA")
                        {
                            SqlCommand comando = new SqlCommand("UPDATE NUNCA_TAXI.Turnos SET Tu_Habilitado=@habi WHERE Tu_Descripcion = '" + tb_desc.Text + "'", con);
                            comando.Parameters.AddWithValue("habi", 0);

                            try
                            {
                                Modelo.Modelo.openConnection(con);
                                comando.ExecuteNonQuery();
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                            finally
                            {
                                Modelo.Modelo.closeConnection(con);
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("La hora de inicio debe ser menor a la hora fin");
                }
            }
            else
            {
                MessageBox.Show("Por favor, complete todos los campos con valores validos para continuar");
            }
        }
    }
}
